﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using App_Persistencia;

namespace App_Negocio
{
    public class Menu
    {
        List<Menu_Detalle> menu_Detalles;

        public List<Menu_Detalle> Menu_Detalles
        {
            get { return menu_Detalles; }
            set { menu_Detalles = value; }
        }
        
        int id;
        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        string nombre;
        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        string descripcion;
        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }
        float precio;
        public float Precio
        {
            get { return precio; }
            set { precio = value; }
        }
        int menu_Tipo;
        public int Menu_Tipo
        {
            get { return menu_Tipo; }
            set { menu_Tipo = value; }
        }

        Menu_Tipo menu_tipo_ref;

        public Menu_Tipo Menu_tipo_ref
        {
            get { return menu_tipo_ref; }
            set { menu_tipo_ref = value; }
        }

        public DataView cargarMenu()
        {
            Menu_Data menu = new Menu_Data();

            DataTable dataTable= menu.cargarMenu();


            return dataTable.DefaultView;
        }




        /// <summary>
        /// Modificado por Mauri
        /// </summary>
        /// <param name="idMenu"></param>
        /// <returns></returns>
        public DataView cargarMenuDetalles(int idMenu)
        {
            Menu_Data menu = new Menu_Data();
            menu.Id = idMenu;
            DataTable dataTable = menu.menuCompletoConId();
            Menu_tipo_ref = new Menu_Tipo();
            Menu_tipo_ref.Nombre = dataTable.Rows[0]["TipoNombre"].ToString();
            Menu_tipo_ref.Id = int.Parse(dataTable.Rows[0]["TipoId"].ToString());
            dataTable = menu.cargarMenuDetalles(idMenu);
            Menu_Detalle item = null;
            Menu_Detalles = new List<Menu_Detalle>();
            foreach (DataRow dr in dataTable.Rows)
            {
                item = new Menu_Detalle();
                item.AlimentoRef = new Alimento();
                item.AlimentoRef.Id = int.Parse(dr["IdAlimento"].ToString());
                item.AlimentoRef.Tipo_AlimentoRef = new Alimento_Tipo();
                item.AlimentoRef.Tipo_AlimentoRef.Nombre = dr["Tipo_De_Alimento"].ToString();
                //MODIFICACION
                item.AlimentoRef.Tipo_AlimentoRef.Id = int.Parse(dr["Tipo_De_Alimento_Id"].ToString());
                item.AlimentoRef.Nombre = dr["Nombre"].ToString();
                item.AlimentoRef.Descripcion = dr["Descripcion"].ToString();
                Menu_Detalles.Add(item);
            }

            return dataTable.DefaultView;
        }

        
        public void buscarUnMenu()
        {
            Menu_Data menuData = new Menu_Data();
            menuData.Id = id;

            try
            {
                menuData.buscarUnMenu();
                precio = menuData.Precio;
            }
            catch (SystemException ex)
            {
                //si se genera una Exepcion de este tipo quiere decir que no se pudo grabar el registro
                //genero una nueva exepcion para la capa superior
                throw new ApplicationException();
            }

        }

        public static DataTable listarMenu_Tabla(int idPresupuesto)
        {
            Menu_Data mdd = new Menu_Data();
            DataTable tabla = mdd.buscarMenuesPorPresupuesto(idPresupuesto);
            return tabla;
        }

        public static List<Menu> listarMenu_Lista(Presupuesto presu)
        {
            List<App_Negocio.Menu> lista = new List<Menu>();
            DataTable tabla = listarMenu_Tabla(presu.Id);
            App_Negocio.Menu m = new Menu();
            foreach (DataRow fila in tabla.Rows)
            {
                m = new Menu();
                //m.Precio = float.Parse(fila["Precio"].ToString());// o .value no se debe usar mas
                m.Id = int.Parse(fila["MenuId"].ToString());
                m.Descripcion = fila["Descripcion"].ToString();
                m.Nombre = fila["Nombre"].ToString();
                m.Menu_Tipo = int.Parse(fila["TipoMenuId"].ToString());
                m.Menu_Detalles = App_Negocio.Menu_Detalle.listarMenuDetalle_Lista(m.Id, presu);
                lista.Add(m);
            }
            return lista;
        }

        public float damePrecio(int idMenu)
        {
            Menu_Data menuprecio = new Menu_Data();
            return menuprecio.damePrecio(idMenu);

        }

        /// <summary>
        /// modificado por maury
        /// </summary>
        public void guardarMenu()
        {
            Menu_Data menuNuevo = new Menu_Data();
            menuNuevo.Nombre = nombre;
            menuNuevo.Descripcion = descripcion;
            menuNuevo.Menu_Tipo = Menu_tipo_ref.Id;
            menuNuevo.Menu_Detalles = new List<App_Persistencia.Menu_Detalle_Data>();
            Menu_Detalle_Data item = null;
            foreach (Menu_Detalle det in menu_Detalles)
            {
                item = new Menu_Detalle_Data();
                item.Alimento = det.AlimentoRef.Id;
                item.Cantidad = det.Cantidad;
                menuNuevo.Menu_Detalles.Add(item);
            }
            menuNuevo.guardarMenu();
            //MODIFICACION
            Id = menuNuevo.Id;
        }

        public float damePrecio()
        {
            Menu_Data menuprecio = new Menu_Data();
            return menuprecio.damePrecio(Id);
        }


        public static DataTable listarMenu_TablaxEvento(int idEvento)
        {
            Menu_Data mdd = new Menu_Data();
            DataTable tabla = mdd.buscarMenuesPorEvento(idEvento);
            return tabla;
        }

        public static List<Menu> listarMenu_ListaxEvento(Evento even)
        {
            List<App_Negocio.Menu> lista = new List<Menu>();
            DataTable tabla = listarMenu_TablaxEvento(even.Id);
            App_Negocio.Menu m = new Menu();
            foreach (DataRow fila in tabla.Rows)
            {
                m = new Menu();
                //m.Precio = float.Parse(fila["Precio"].ToString());// o .value
                m.Id = int.Parse(fila["MenuId"].ToString());
                m.Descripcion = fila["Descripcion"].ToString();
                m.Nombre = fila["Nombre"].ToString();
                m.Menu_Tipo = int.Parse(fila["TipoMenuId"].ToString());
                lista.Add(m);
            }
            return lista;
        }

        public DataView cargarMenuEspecial()
        {
            Menu_Data menu = new Menu_Data();

            DataView dataView = menu.cargarMenuEspecial();

            return dataView;
        }

        public DataTable cargarGVMenu()
        {
            return new DataTable();
        }

    }
}
